package org.ricks.ioc;


import org.ricks.ioc.cfg.EnvConfigHolder;
import org.ricks.ioc.cfg.RicksPropertiesLoader;
import org.ricks.ioc.utils.ClassUtils;
import java.util.Map;

/**
 * ricks框架启动类
 */
public class Ricks {

    private Ricks() {

    }

    /**
     * 启动游戏服务器.
     * <p>
     * 以启动Main方法所在的包开始扫描需要管理的类.
     *
     *         //默认扫描路径
     *         ModularContext.me().scan(Set.of(klass.getPackage().getName()));
     *
     * @param klass 启动服务类
     * @param args  启动参数，可以动态覆盖配置
     */
    public static void run(Class<? extends Lifecycle> klass, String... args) {


        // 载入配置
        EnvConfigHolder.buildLoadFunction(() -> loadProperties(args));

        // 初始化启动引导程序，参考ServerBootstrap的具体实现
        ClassUtils.newInstance(klass).start();
    }

    /**
     * 根据启动参数分析加载相应的配置文件
     */
    private static Map<String, String> loadProperties(String... args) {
        RicksPropertiesLoader loader = new RicksPropertiesLoader();
        // 加载命令行参数
        loader.loadingArgs(args);
        // 加载配置文件参数
        RicksPropertiesLoader.loadingProperties();
        // 最终的配置
        return RicksPropertiesLoader.getProperties();
    }
}

